/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2022-10-17
 * Time: 21:44
 */
public class Solution {
    public boolean isValidSudoku(char[][] board) {
        //定义三个哈希表
        //使用二维数组相当于不用每遍历一行就创建一个一维数组
        //列为10为了能映射到9下标
        int [][]row=new int[9][10];//记录该行是否有重复
        int [][]col=new int[9][10];//记录该列是否有重复
        int [][]box=new int[9][10];//记录该9宫格是否有重复
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                char ch=board[i][j];
                if(ch=='.'){
                    continue;
                }
                int result=ch-'0';
                if(row[i][result]==1){
                    return false;
                }
                if (col[j][result]==1) {
                    return false;
                }
                if (box[j/3+i/3*3][result]==1) {
                    //这里原理与row和col一样,总共九个九宫格,每个九宫格里面有九种数字
                    //怎样确定是第几个九宫格,就是j/3+i/3*3
                    return false;
                }

                //如果三种情况都没有出现过重复
                //三个哈希表均赋值为1
                row[i][result]=1;
                col[j][result]=1;
                box[j/3+i/3*3][result]=1;
            }
        }
        return true;
    }
}
